
const { app, BrowserWindow, ipcMain, dialog } = require('electron/main');
const path = require('node:path');

const fs = require('fs')

async function handleFileOpen() {
  const { response, inputValues } = await dialog.showMessageBox({
    type: 'question',
    title: '输入框',
    message: '请输入内容:',
    buttons: ['确定', '取消'],
    defaultId: 0,
    cancelId: 1,
    detail: '请输入下方内容:', // 辅助信息
    checkboxLabel: '记住选择', // 可选复选框
    checkboxChecked: false,
    // 实验性输入框（仅在部分环境下有效）
    textFields: ['输入框占位符'], // 可能名为 `inputs` 或 `textFields`
  });

  if (response === 0) {
    console.log('用户输入:', inputValues[0]);
  }
}
//
async function updateEnvVariable(_, data) {
  console.log(data);
  let { filePath, key: targetKey, value: newValue } = data
  try {
    const absolutePath = path.resolve(__dirname, filePath);

    // 1. 读取文件内容
    const content = fs.readFileSync(absolutePath, 'utf-8');


    // 3. 处理每行内容
    const updatedContent = content
      .split(/\r?\n/)
      .map(line => {
        // 匹配键值对格式（支持带引号）
        const match = line.match(/^\s*([\w.-]+)\s*=\s*(['"]?)(.*?)\2\s*$/);
        if (match && match[1] === targetKey) {
          return `${targetKey}=${newValue}`; // 保持原有格式
        }
        return line; // 保留未修改的行
      })
      .join('\n');

    // 4. 写入新内容
    fs.writeFileSync(absolutePath, updatedContent);

    console.log('success');
    return true;
  } catch (error) {
    console.error('Error:', error.message);
    return false;
  }
}


function createWindow() {

  const env = readEnvFromTxt('SET_IP.txt'); // 假设文件在项目根目录
  const ipAddress = env.REACT_APP_IP_ADDRESS;

  console.log('解析结果:', ipAddress);

  if (!ipAddress) return handleFileOpen();

  const mainWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    webPreferences: {
      preload: path.join(__dirname, 'preload.js')
    }
  });
  mainWindow.loadURL(`http://${ipAddress}`);
  // mainWindow.loadFile("build/index.html")
}

app.whenReady().then(() => {



  ipcMain.handle('dialog:openFile', handleFileOpen);
  ipcMain.handle('updateEnvVariable', (event, params) => {
    return updateEnvVariable(event, params);
  });
  createWindow();

  app.on('activate', function () {
    if (BrowserWindow.getAllWindows().length === 0) createWindow();
  });
});

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') app.quit();
});





function readEnvFromTxt(filePath) {
  try {
    // 1. 解析绝对路径
    const absolutePath = path.resolve(__dirname, filePath);

    // 2. 同步读取文件内容
    const content = fs.readFileSync(absolutePath, 'utf-8');

    // 3. 解析键值对
    const envObj = {};
    content
      .split(/\r?\n/) // 兼容不同系统的换行符
      .filter(line => {
        // 过滤注释和空行
        const trimmed = line.trim();
        return trimmed && !trimmed.startsWith('#');
      })
      .forEach(line => {
        // 支持带引号的值 (例如：KEY="value")
        const match = line.match(/^\s*([\w.-]+)\s*=\s*(.*?)\s*$/);
        if (match) {
          let value = match[2];
          // 去除首尾引号
          if (/^['"](.*)['"]$/.test(value)) {
            value = value.slice(1, -1);
          }
          envObj[match[1]] = value;
        }
      });

    return envObj;
  } catch (error) {
    console.error('读取文件失败:', error.message);
    return {};
  }
}